﻿
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Prism.Services.Dialogs;
using ProductionLine.Modules.ShareLib.Helpers;
using ProductionLine.Modules.ShareLib.Models;
using System;
using System.Windows;
namespace ProductionLine.Modules.Login.ViewModels;

public partial class LoginViewModel : ObservableObject,IDialogAware {

    #region 属性和字段

    /// <summary>
    /// 存放当前的用户,同时实现dialog消息弹窗
    /// </summary>
    public UserSession UserSessionProp { get; }

    public string Title => "登录界面";

    /// <summary>
    /// 构造函数
    /// </summary>
    /// <param name="userSessionProp">存放当前的用户,在app中注册成了单例</param>
    public LoginViewModel(UserSession userSessionProp) {
        UserSessionProp = userSessionProp;
    }

    /// <summary>
    /// 账号
    /// </summary>
    [ObservableProperty]
    string _userName = "root";

    /// <summary>
    /// 密码
    /// </summary>
    [ObservableProperty]
    string _userPass = "root";
    //自定义事件
    //public event Action<IDialogResult> RequestClose; 是 Prism 框架中用于对话框关闭机制的自定义事件。
    //这个事件属于 IDialogAware 接口的核心组成部分，主要作用是在对话框需要关闭时，通过事件参数传递关闭结果（IDialogResult）。
    public event Action<IDialogResult> RequestClose;//关闭委托

    #endregion


    #region 命令  
    /// <summary>
    ///Login登陆方法
    /// </summary>
    [RelayCommand]
    void Login() {
        //如果账号/密码为空,返回
        if (string.IsNullOrEmpty(UserName) || string.IsNullOrEmpty(UserPass)) {
            MessageBox.Show("用户名或密码为空");
            return;
        }

        // 如果不为空，查询是否在数据库中，如果不在数据库中则弹窗提醒
        var userList = SqlSugarHelper.Db.Queryable<User>().Where(x => x.UserName == UserName && x.Password == UserPass).ToList();

        if (userList.Count > 0) {//登录成功
            // 记录当前登录成功的账号
            UserSessionProp.CurrentUser = userList[0];
            //回复对话框ok
            RequestClose(new DialogResult(ButtonResult.OK));

        } else {//登录失败
            MessageBox.Show("用户名或密码错误!!！");
        }
    }
    /// <summary>
    /// 是否能够关闭对话框, 就是在关闭对话框的时候调用1
    /// </summary>
    /// <returns></returns>
    /// <exception cref="NotImplementedException"></exception>
    public bool CanCloseDialog() {
       return true;
    }
    /// <summary>
    /// 关闭, 就是在关闭对话框的时候调用2
    /// </summary>
    public void OnDialogClosed() {
       
    }
    /// <summary>
    /// 打开对话框 , 就是在打开对话框的时候调用,传递参数
    /// </summary>
    /// <param name="parameters">接收数据,通过key值</param>
    public void OnDialogOpened(IDialogParameters parameters) {
        
    }
    #endregion

}